<?php
App::uses('AppController', 'Controller');
/**
 * Usuarios Controller
 *
 * @property Usuario $Usuario
 */
class UsuariosController extends AppController {
	
	public function beforeFilter() {
		parent::beforeFilter();
		if($this->Session->read('Auth.User.User.perfil_id') != 1) {
			$this->Auth->deny(array('add', 'edit', 'delete'));
		}
	}
	
/**
 * index method
 *
 * @return void
 */
	public function index() {
		
		if ($this->request->is('post')) {
			$this->_redirectToNamedUrl();
		}
		
		if (!empty($this->params['named']['palavra_chave'])) {
			$this->paginate = array(
					'conditions' => array(
						'OR' => array(
							'Usuario.login LIKE' => '%' . $this->params['named']['palavra_chave'] . '%',
							'Usuario.nome LIKE' => '%' . $this->params['named']['palavra_chave'] . '%'
						)
					)
			); 
			$this->request->data['Filter']['palavra_chave'] = $this->params['named']['palavra_chave'];
		}
		
		$this->Usuario->recursive = 0;
		$this->set('usuarios', $this->paginate());
		$this->set('situacaos', $this->Usuario->situacaos);
	}

/**
 * view method
 *
 * @param string $id
 * @return void
 */
	public function view($id = null) {
		$this->Usuario->id = $id;
		if (!$this->Usuario->exists()) {
			throw new NotFoundException(__('Usuário Invalido'));
		}
		$this->set('usuario', $this->Usuario->read(null, $id));
		$this->set('situacaos', $this->Usuario->situacaos);
	}

/**
 * add method
 *
 * @return void
 */
	public function add() {
		if ($this->request->is('post')) {
			$this->Usuario->create();
			if ($this->Usuario->save($this->request->data)) {
				$this->Session->setFlash(__('Usuário criado com sucesso.'), 'flash_success');
				$this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('Não foi possível cria usuário. Por favor, tente novamente.'), 'flash_error');
			}
		}
		$perfils = $this->Usuario->Perfil->find('list');
		$this->set(compact('perfils'));
	}

/**
 * edit method
 *
 * @param string $id
 * @return void
 */
	public function edit($id = null) {
		$this->Usuario->id = $id;
		if (!$this->Usuario->exists()) {
			throw new NotFoundException(__('Usuário Invalido'));
		}
		if ($this->request->is('post') || $this->request->is('put')) {
			if ($this->Usuario->save($this->request->data)) {
				$this->Session->setFlash(__('Usuário alterado com sucesso.'), 'flash_success');
				$this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('Não foi possível alterar usuário. Por favor, tente novamente.'), 'flash_error');
			}
		} else {
			$this->request->data = $this->Usuario->read(null, $id);
		}
		$perfils = $this->Usuario->Perfil->find('list');
		$this->set(compact('perfils'));
		$this->set('situacaos', $this->Usuario->situacaos);
	}

	
	/**
	 * change password  method
	 *
	 * @param string $id
	 * @return void
	 */
	public function changepass($id = null) {
		$this->Usuario->id = $id;
		if (!$this->Usuario->exists()) {
			throw new NotFoundException(__('Usuário Invalido'));
		}
		if ($id != $this->Session->read('Auth.User.id')){
			throw new NotFoundException(__('Usuário Invalido'));
		}
		if ($this->request->is('post') || $this->request->is('put')) {
			$usuario = $this->Usuario->read(null, $id);	
			if (AuthComponent::password($this->request->data['Usuario']['senha']) ==  $usuario['Usuario']['password']){
				if (AuthComponent::password($this->request->data['Usuario']['newpassword']) !=  $usuario['Usuario']['password']){
					if(!empty($this->request->data['Usuario']['newpassword'])){
						if($this->request->data['Usuario']['newpassword'] == $this->request->data['Usuario']['reppassword']){
							$this->request->data['Usuario']['password'] = $this->request->data['Usuario']['newpassword'] ;
							
							if ($this->Usuario->save($this->request->data, false)) {
								$this->Session->setFlash(__('Senha trocada com sucesso.'));
								$this->redirect(array('controller' => 'Pages' ,'action' => 'display'));
							} else {
								$this->Session->setFlash(__('Não foi possível salvar Usuário. Por favor, tente novamente.'));
							}
						}else{
							$this->Session->setFlash(__('A nova senha deve ser repetida no campo Repita Senha. Por favor, tente novamente.'));
						}
					}else{
						$this->Session->setFlash(__('A nova senha deve ser preenchida. Por favor, tente novamente.'));
					}
				}else{
					$this->Session->setFlash(__('A nova senha  deve ser diferente da sua senha atual. Por favor, tente novamente.'));
				}
			}else{
				$this->Session->setFlash(__('A senha fornecida é diferente da sua senha. Por favor, tente novamente.'));
			}
			
		} else {
			$this->request->data = $this->Usuario->read(null, $id);
		}
		$perfils = $this->Usuario->Perfil->find('list');
		$this->set(compact('perfils'));
		$this->set('situacaos', $this->Usuario->situacaos);
	}
	
/**
 * delete method
 *
 * @param string $id
 * @return void
 */
	public function delete($id = null) {
		if (!$this->request->is('post')) {
			throw new MethodNotAllowedException();
		}
		$this->Usuario->id = $id;
		if (!$this->Usuario->exists()) {
			throw new NotFoundException(__('Usuário Invalido'));
		}
		if ($this->Usuario->delete()) {
			$this->Session->setFlash(__('Usuário removido com sucesso.'));
			$this->redirect(array('action' => 'index'));
		}
		$this->Session->setFlash(__('Usuario não pode ser removido.'));
		$this->redirect(array('action' => 'index'));
	}
	
	public function login() {
		
		if(!empty($this->activeUser))
		{
			$this->setFlash('Você já está autenticado', 'flash_info');
			$this->redirect($this->Auth->redirect());
		}
		
		if ($this->request->is('post')) { 
			if ($this->Auth->login()) { 
				$this->activeUser = $this->Auth->user();
				$this->redirect($this->Auth->redirect());
			} else {
				$this->Session->setFlash(__('Login ou senha incorretos, Tente novamente.'), 'flash_error', array(), 'auth');
			}
		}
		
		$this->layout = 'login';
	}
	
	public function logout() {
		$this->redirect($this->Auth->logout());
	}
	
	/**
	 * add method
	 *
	 * @return void
	 */
	public function esqueci() {
		
		if ($this->request->is('post')) {
			$user = $this->Usuario->find('first', array(
					'conditions' => array(
						'login' => $this->request->data['Usuario']['login'],
						'email' => $this->request->data['Usuario']['email']
					)
				) 
			);
			if (!empty($user)){
				$this->sendpass($user['Usuario']['id']);
				$this->redirect('login');
			}else{
				$this->Session->setFlash('Usuário ou endereço de email não cadastrado.');
			}
		}
		
		$this->layout = 'login';
	}
	
	function geraSenha($tamanho = 8, $maiusculas = true, $numeros = true, $simbolos = false)
	{
		$lmin = 'abcdefghijklmnopqrstuvwxyz';
		$lmai = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
		$num = '1234567890';
		$simb = '!@#$%*-';
		$retorno = '';
		$caracteres = '';
		
		$caracteres .= $lmin;
		if ($maiusculas) $caracteres .= $lmai;
		if ($numeros) $caracteres .= $num;
		if ($simbolos) $caracteres .= $simb;
		
		$len = strlen($caracteres);
		for ($n = 1; $n <= $tamanho; $n++) {
			$rand = mt_rand(1, $len);
			$retorno .= $caracteres[$rand-1];
		}
	
		return $retorno;
	}

	public function sendpass($id = null) {
		if (!$this->request->is('post')) {
			throw new MethodNotAllowedException();
		}
		$this->Usuario->id = $id;
		if (!$this->Usuario->exists()) {
			throw new NotFoundException(__('Usuário Invalido'));
		}
		$usuario = $this->Usuario->read(null, $id);	
		$novasenha = $this->geraSenha();
		$usuario['Usuario']['password'] = $novasenha ;
		
		if ($this->Usuario->save($usuario)) {
			$this->set('nome', $usuario['Usuario']['nome']);
			$this->set('nova_senha', $novasenha);
			
			$email = new CakeEmail();
			$email->config('gmail');
			$email->to($usuario['Usuario']['email'] );
			$email->subject('[' . Configure::read('Sigem.name') . '] Recuperação de senha');
			$email->emailFormat('html');
			$email->template('reset_password');
			$email->viewVars($this->viewVars);
			$email->send();
			
			$this->Session->setFlash('Instruções para redefinir sua senha foram enviadas para seu email cadastrado.', 'flash_info');
		} else {
			$this->Session->setFlash(__('Não foi possível iniciar processo para rercuperação da senha. Entre em contato com o administrador do sistema.', 'flash_info'));
		}
		
		return;
	}
	
	
/**
 * profile method
 *
 * @param string $id
 * @return void
 */
	public function profile($id = null) {
		if ($this->request->is('post') || $this->request->is('put')) {
			if ($this->Usuario->save($this->request->data)) {
				$this->Session->setFlash(__('Usuário alterado com sucesso.'), 'flash_success');
				$this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('Não foi possível alterar usuário. Por favor, tente novamente.'), 'flash_error');
			}
		} else {
			$this->request->data = $this->Usuario->read(null, $this->activeUser['id']);
		}
	}
	
/**
 * Envia um email para o endereço associado ao usuário
 * com informações para recuperação da senha
 *
 * @param array $userData
 * @return bool
 */
	protected function _sendLinkToMail($userData)
	{
		$this->set('user', $userData['Usuario']);
		$sub = '[' . Configure::read('Sigem.name') . '] Recuperação de senha';
		if($this->_sendMailNotification($userData['Usuario']['email'], $sub, 'reset_password'))	{
			$this->Session->setFlash('Instruções para redefinir sua senha foram enviadas para seu email cadastrado', 'flash_info');
		} else {
			$this->Session->setFlash(sprintf('Não foi possível iniciar processo para rercuperação da senha. Entre em contato com o administrador do sistema.', 'flash_info'));
		}
		
		return;
	}
	
}